package dao

import (
	"time"
)

// 这是 Article 的全局公开dao对象，被service层调用!
var ArticleDao = articleDao{}

// 网络文章聚合表
// 这是 article表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Article struct {
	Id            int32     `json:"id" form:"id" db:"id" v:"id"`
	Domain        string    `json:"domain" form:"domain" db:"domain" v:"domain"`                                     // 来源域名(不一定是顶级域名)
	Name          string    `json:"name" form:"name" db:"name" v:"name"`                                             // 来源名称
	Title         string    `json:"title" form:"title" db:"title" v:"title"`                                         // 文章标题
	Cover         string    `json:"cover" form:"cover" db:"cover" v:"cover"`                                         // 图片封面
	Author        string    `json:"author" form:"author" db:"author" v:"author"`                                     // 文章作者(可能带html)
	AuthorTxt     string    `json:"author_txt" form:"author_txt" db:"author_txt" v:"author_txt"`                     // 文章作者(纯文本)
	Lang          int8      `json:"lang" form:"lang" db:"lang" v:"lang"`                                             // 语言: 0-中文;1-英语
	PubDate       string    `json:"pub_date" form:"pub_date" db:"pub_date" v:"pub_date"`                             // 发布时间
	Url           string    `json:"url" form:"url" db:"url" v:"url"`                                                 // 文章原始链接
	Context       string    `json:"context" form:"context" db:"context" v:"context"`                                 // 正文(带html)
	Txt           string    `json:"txt" form:"txt" db:"txt" v:"txt"`                                                 // 正文(纯文本)
	Tags          string    `json:"tags" form:"tags" db:"tags" v:"tags"`                                             // 文章tag,逗号分隔
	Css           string    `json:"css" form:"css" db:"css" v:"css"`                                                 // 需要额外引入的css样式
	ViewNum       int32     `json:"view_num" form:"view_num" db:"view_num" v:"view_num"`                             // 浏览数
	CmtNum        int32     `json:"cmt_num" form:"cmt_num" db:"cmt_num" v:"cmt_num"`                                 // 评论数
	LikeNum       int32     `json:"like_num" form:"like_num" db:"like_num" v:"like_num"`                             // 点赞数
	LastReplyUid  int32     `json:"last_reply_uid" form:"last_reply_uid" db:"last_reply_uid" v:"last_reply_uid"`     // 最后回复者
	LastReplyTime time.Time `json:"last_reply_time" form:"last_reply_time" db:"last_reply_time" v:"last_reply_time"` // 最后回复时间
	Top           int8      `json:"top" form:"top" db:"top" v:"top"`                                                 // 置顶,0-否,1-置顶
	Markdown      int8      `json:"markdown" form:"markdown" db:"markdown" v:"markdown"`                             // 是否是markdown格式：0-否，1-是
	Qctt          int8      `json:"qctt" form:"qctt" db:"qctt" v:"qctt"`                                             // 是否是 gctt 翻译：0-否则；1-是
	CloseReply    int8      `json:"close_reply" form:"close_reply" db:"close_reply" v:"close_reply"`                 // 是否关闭回复评论功能，1-是；0-否
	Status        int8      `json:"status" form:"status" db:"status" v:"status"`                                     // 状态：0-初始抓取；1-已上线；2-下线(审核拒绝)
	OpUser        string    `json:"op_user" form:"op_user" db:"op_user" v:"op_user"`
	Ctime         time.Time `json:"ctime" form:"ctime" db:"ctime" v:"ctime"`
	Mtime         time.Time `json:"mtime" form:"mtime" db:"mtime" v:"mtime"`
}

// 注意:这是 Article 的私有dao对象，只能在dao层内使用!
type articleDao struct {
	InsertTemplate func(arg Article) (int64, error)         //插入一条记录
	UpdateTemplate func(arg Article) (int64, error)         //更新一条记录
	DeleteTemplate func(id int64) (int64, error)            `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Article, error)          `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg ArticleList) ([]Article, error) //模糊分页查询
}

/*
// 这是 article 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type ArticlePostman struct {
id
domain
name
title
cover
author
author_txt
lang
pub_date
url
context
txt
tags
css
view_num
cmt_num
like_num
last_reply_uid
last_reply_time
top
markdown
qctt
close_reply
status
op_user
ctime
mtime

}*/

// 这是 article 表的批量请求参数
type ArticleReq struct {
	List []Article `json:"list" form:"list"`
}

// 这是 articleDao.List()方法的请求参数
type ArticleList struct {
	Page
}
